#pragma once

#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <dirent.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>

#include <string>
#include <vector>
#include <experimental/filesystem>

#include <butil/files/file_enumerator.h>
#include <butil/files/file_path.h>
#include <butil/file_util.h>

#include "util/status.h"

namespace hawking {
namespace indexlib {

class FslibWrapper {
public:
    static ReturnValue<off_t> FileLength(const std::string& path);

    static std::string ReadFile(const std::string& path);

    static std::vector<std::string_view> SplitString(const std::string& str, char d);

    static bool PathExist(const std::string& path);

    static std::vector<std::string> GetSubDir(const std::string& path);

    static std::string Set2String(const std::set<std::string>& s, char d);

    static bool RmDir(const std::string& dirname);

    static bool Mkdir(const std::string& dirname);

    static void GetAllFiles(const std::string& dirname, std::vector<std::string>* files);
};

}
}
